
#ifndef FISICA_OBJETO_H_
#define FISICA_OBJETO_H_

class btCollisionShape;
class btMotionState;
class btRigidBody;

namespace Fisica {

class Objeto {
   private:
      btCollisionShape *forma;
      btMotionState *estado;
      btRigidBody *cuerpo;

   public:
      Objeto(float x, float y, float z);
      Objeto(btCollisionShape &forma, float x, float y, float z, float masa);

      /*
       * Construye un Objeto Fisico y lo agrega al Motor Fisico.
       *
       * Esta instancia se hara responsable de liberar los recursos asociados
       * a la forma.
       * */
      void construirCon(btCollisionShape &forma, float masa);

      /*
       * Inicializa esta instancia en funcion de un objeto btRigidBody ya
       * construido, obtiene de el su estado y forma y, junto al objeto en si,
       * son apropiados por esta instancia, liberando los recursos.
       * */
      void inicializarDesde(btRigidBody &objetoConstruido);

      void transformacion(float matrix[16]) const;
      void setTransformacion(const float matrix[16]);
      void desactivar();
      
      btRigidBody* cuerpoRigido();

      virtual ~Objeto();
};

}

#endif
